home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-05-29 | 3.3 KB | 145 lines | [TEXT/CWIE] |
- / / /
-
- unit MyDimText;
-
- interface
-
- uses
- Dialogs;
-
- procedure CreateDimText (var data: univ Ptr; dlg: DialogPtr; YourDrawProc: ProcPtr);
- procedure DestroyDimText (var data: univ Ptr);
- procedure DrawDimText (data: univ Ptr; dlg: DialogPtr; item: integer);
- { Call this from YourDrawProc }
- procedure SetDimKind (data: univ Ptr; dlg: DialogPtr; item: integer; dimmed: boolean);
- procedure GetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; var s: Str255);
- procedure SetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; s: Str255);
-
- { procedure YourDrawProc(dlg: DialogPtr; item: integer); }
- { begin}
- { DrawDimText(data,dlg,item); }
- { end;}
-
- implementation
-
- uses
- MyStrH, MyDialogs;
-
- type
- MyData = record
- YourDrawProc: ProcPtr;
- items: StrHHandle;
- end;
- MyDataPtr = ^MyData;
-
- procedure CreateDimText (var data: univ Ptr; dlg: DialogPtr; YourDrawProc: ProcPtr);
- var
- md: MyDataPtr;
- begin
- data := NewPtr(SizeOf(MyData));
- md := MyDataPtr(data);
- md^.YourDrawProc := YourDrawProc;
- md^.items := NewStrH;
- end;
-
- procedure DestroyDimText (var data: univ Ptr);
- var
- md: MyDataPtr;
- begin
- md := MyDataPtr(data);
- DisposeStrH(md^.items);
- DisposePtr(data);
- data := nil;
- end;
-
- procedure DrawDimText (data: univ Ptr; dlg: DialogPtr; item: integer);
- var
- md: MyDataPtr;
- r: Rect;
- begin
- md := MyDataPtr(data);
- SetPort(dlg);
- GetDItemRect(dlg, item, r);
- PenNormal;
- InsetRect(r, 1, 1);
- EraseRect(r);
- InsetRect(r, -1, -1);
- TextMode(grayishTextOr);
- PenPat(Pattern(gray));
- FrameRect(r);
- MoveTo(r.left + 3, r.bottom - 3);
- DrawString(GetIndStrH(md^.items, item));
- PenNormal;
- end;
-
- procedure SetDimKind (data: univ Ptr; dlg: DialogPtr; item: integer; dimmed: boolean);
- var
- md: MyDataPtr;
- h: Handle;
- k: integer;
- r: Rect;
- s: Str255;
- wasdimmed: boolean;
- begin
- md := MyDataPtr(data);
- SetPort(dlg);
- GetDialogItem(dlg, item, k, h, r);
- wasdimmed := k = userItem;
- if wasdimmed <> dimmed then begin
- GetDimText(data, dlg, item, s);
- SetIndStrH(md^.items, item, s);
- if dimmed then begin
- TEDeactivate(DialogPeek(dlg)^.textH);
- if item = SelectedTextItem(dlg) then begin
- SelectDialogItemText(dlg, item, 0, 0);
- DialogPeek(dlg)^.editField := -1;
- end;
- InsetRect(r, -3, -3);
- SetDialogItem(dlg, item, userItem, Handle(md^.YourDrawProc), r);
- DialogPeek(dlg)^.editField := -1;
- TEActivate(DialogPeek(dlg)^.textH);
- DrawDimText(data, dlg, item);
- end
- else begin
- FrameRect(r);
- InsetRect(r, 1, 1);
- EraseRect(r);
- InsetRect(r, 2, 2);
- SetDialogItem(dlg, item, editText, h, r);
- SetItemText(dlg, item, s);
- end;
- end;
- end;
-
- procedure GetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; var s: Str255);
- var
- md: MyDataPtr;
- k: integer;
- begin
- md := MyDataPtr(data);
- GetDItemKind(dlg, item, k);
- if k = userItem then begin
- s := GetIndStrH(md^.items, item);
- end
- else begin
- GetItemText(dlg, item, s);
- end;
- end;
-
- procedure SetDimText (data: univ Ptr; dlg: DialogPtr; item: integer; s: Str255);
- var
- md: MyDataPtr;
- k: integer;
- begin
- md := MyDataPtr(data);
- GetDItemKind(dlg, item, k);
- if k = userItem then begin
- SetIndStrH(md^.items, item, s);
- DrawDimText(data, dlg, item);
- end
- else begin
- SetItemText(dlg, item, s);
- end;
- end;
-
- end.